package com.example.service;

import com.example.bean.User;
import com.example.dao.UserDAO;

/**
 * 用户业务逻辑JavaBean
 * 负责处理用户登录、认证等业务逻辑
 */
public class UserService {
    
    private UserDAO userDAO;
    
    /**
     * 构造函数，初始化DAO
     */
    public UserService() {
        this.userDAO = new UserDAO();
    }
    
    /**
     * 用户登录验证
     * @param username 用户名
     * @param password 密码
     * @return 用户对象，如果验证失败返回null
     */
    public User login(String username, String password) {
        // 业务逻辑验证
        if (username == null || username.trim().isEmpty()) {
            return null;
        }
        
        if (password == null || password.trim().isEmpty()) {
            return null;
        }
        
        // 调用DAO层验证
        User user = userDAO.findByUsername(username.trim());
        
        if (user != null && password.equals(user.getPassword())) {
            return user;
        }
        
        return null;
    }
    
    /**
     * 验证用户名是否存在
     * @param username 用户名
     * @return 是否存在
     */
    public boolean isUsernameExists(String username) {
        if (username == null || username.trim().isEmpty()) {
            return false;
        }
        
        User user = userDAO.findByUsername(username.trim());
        return user != null;
    }
    
    /**
     * 验证用户是否为管理员
     * @param user 用户对象
     * @return 是否为管理员
     */
    public boolean isAdmin(User user) {
        if (user == null) {
            return false;
        }
        return "admin".equals(user.getRole());
    }
    
    /**
     * 验证用户是否为普通用户
     * @param user 用户对象
     * @return 是否为普通用户
     */
    public boolean isNormalUser(User user) {
        if (user == null) {
            return false;
        }
        return "user".equals(user.getRole());
    }
    
    /**
     * 根据用户名获取用户信息
     * @param username 用户名
     * @return 用户对象
     */
    public User getUserByUsername(String username) {
        if (username == null || username.trim().isEmpty()) {
            return null;
        }
        return userDAO.findByUsername(username.trim());
    }
    
    /**
     * 修改密码
     * @param username 用户名
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 是否修改成功
     */
    public boolean changePassword(String username, String oldPassword, String newPassword) {
        // 业务逻辑验证
        if (username == null || username.trim().isEmpty()) {
            return false;
        }
        
        if (oldPassword == null || oldPassword.trim().isEmpty()) {
            return false;
        }
        
        if (newPassword == null || newPassword.trim().isEmpty()) {
            return false;
        }
        
        // 验证旧密码
        User user = login(username, oldPassword);
        if (user == null) {
            return false;
        }
        
        // 更新密码
        user.setPassword(newPassword);
        return userDAO.updatePassword(username, newPassword);
    }
}

